#pragma once
#include <QString>


namespace NOpenHardwareMonitor {

namespace NHardware {


class ISensor;
class IHDD;

class IHardware
{
public:
	enum class EType
	{
		Mainboard,
		SuperIO,
		CPU,
		RAM,
		GPU_Nvidia,
		GPU_ATI,
		TBalance,
		Heatmaster,
		HDD,
	};


protected:
	~IHardware() {  }


public:
	virtual void Release() = 0;


public:
	virtual void Update() = 0;

	virtual QString GetReport() const = 0;
	virtual QString GetName() const = 0;
	virtual EType GetType() const = 0;
	virtual QString GetIdentifier() const = 0;
	virtual qint32 GetHashCode() const = 0;

	virtual qint32 GetSensorCount() const = 0;
	virtual ISensor* GetSensor(const qint32& Index) = 0;

	virtual qint32 GetSubHardwareCount() const = 0;
	virtual IHardware* GetSubHardware(const qint32& Index) = 0;

	virtual IHDD* GetHDD() = 0;
};

}}


